As integrated circuit (IC) fabrication technology improves, manufacturers are able to integrate additional functionality onto a single chip. Often, the additional functionality is introduced in a subsequent version of a same design. Maintaining data regarding various versions is a burdensome task.
A typical design process for ICs includes a front-end design phase and a back-end development phase. During the front-end phase, hardware engineers design and develop a logical representation of an IC from a set of specifications in the form of a schematic. The schematic is then loaded into a computer from which a circuit netlist is generated. The netlist defines the entire IC design including all components and interconnections.
The IC information may be developed using a hardware description language (HDL) and synthesis. With the aid of circuit simulation tools available on computers, a designer can then simulate the functionality of a given circuit. The circuit simulation process may involve several iterations of design modifications and improvements until the circuit design is finalized.
The back-end development involves several steps during which a final circuit layout (physical description) is developed based on the schematic design of the front-end phase. Various building blocks (or cells), as defined by the finalized circuit schematic, are placed within a predefined floor plan. The cells are then interconnected during a routing stage. After routing, the accuracy of the layout is verified against the schematic, and if no errors or design rule violations are found, the circuit layout information is used for the process of fabrication. The fabricated IC may be further verified to check for fabrication errors.
The use of computers substantially speeds up the verification process. However, when dealing with multiple versions of a design, maintaining the computer code for the verification process can still add substantial overhead to the process. For example, a different team may need to be assigned to each version of the design. Each team will then maintain the code assigned to that team. Coordinating these teams from both a technical and a timing perspective can be a challenging task. For example, if the teams are located in physically remote locations (e.g., in different time zones), additional planning and timing constraints can delay a successful design verification process. Furthermore, it is difficult to determine whether all bug fixes and enhancements have been applied to different design versions.